#pragma once

#include <vex/core/contract/config.h>

namespace vex { namespace core { namespace contract {
    struct VEX_ABSTRACT handle {
        virtual void add_ref() = 0;
        virtual void release() = 0;
        virtual bool has_synchronized_ref_count() const = 0;
        virtual bool is_shareable() const = 0;
        VEX_PROTECT_CONTRACT(handle);
    };
}}}